The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Computer systems may include a number of shared resources, such as memories, processors, storage units, network bandwidth, interfaces, and so forth. These resources are described as shared because they may be utilized by or on behalf of multiple logical or physical components of a computer system. For instance, in the context of a network switching device, usage of certain memory areas may be logically divided amongst different ports, queues, or other components of the device. Individual portions of these memory areas, referred to herein as buffers, may be utilized by or on behalf of device components to, for example, temporarily store network packets, cells, data frames, or other messages for processing. At a given time, each buffer may be classified as belonging to, being assigned to, or being utilized by one or more different physical or logical component of the networking device, such as a port, queue, group of ports, traffic class, and so forth. This classification will typically change over time, as the resource is repeatedly assigned, unassigned, and reassigned to different components for various purposes.
It is sometimes, for various reasons, useful to account for the resources utilized for a component or objective at any given time. For example, a resource management component may allocate different amounts of a type of resource (e.g. a number of buffers, a memory size, a number of processors or threads, an amount of processor usage, bandwidth, etc.) for different objectives, and track the amounts of resources currently utilized for each objective. As another example, it may be useful to provide a reporting mechanism by which system configuration logic and/or system administrators may identify, investigate, and/or respond to inefficient or otherwise undesirable resource utilization within a system. For instance, in the context of a network switching device, a network port can become congested and drop packets quickly without a user having any insight into why the packets were dropped. It may be useful to provide a network administrator with mechanisms for identifying the congestion so as to quickly determine whether existing configurations and/or traffic patterns should change to address observed issues.
However, the tasks of accounting for resources and reporting their utilization itself requires an amount of resources. For example, in a system comprised of many network devices being monitored by a central administrative application or device, the centralized collection of accounting statistics from the network devices represents an additional burden on network resources, such as network bandwidth. As another example, an amount of memory is required for accounting purposes, such as for tracking the current amount of resources utilized for each objective. Of course, as the number of objectives to which a type of resource may be assigned increases, the memory requirements also increase. Moreover, for certain types of usage patterns in certain types of computer systems, such as with respect to message buffers in network switching devices, the frequency with which resource assignments must be made requires that the memory used to track resource usage be capable of sustaining a high read and write rate. For instance, multi-ported memory is often required in such contexts, which can be of relatively high cost and reduced operating rate.